import {
    createAGroupFolder,
    getPlayerData,
    isGroupExist,
    isPlayerExist,
    readConfiguration,
    storageConfigrData,
    storagePlayerData
} from '../function/function.js';

export class Bs extends plugin {
    constructor() {
        super({
            name: '[Bs]配置',
            dsc: '配置',
            event: 'message',
            priority: 1,
            rule: [
                { reg: /^[#\/]?(面包(商店)?|Bs)[设配]置$/i, fnc: 'config' },
                { reg: /^[#\/]设置(.*)店昵称(.*)$/, fnc: 'setNickname' },
                { reg: /^[#\/]设置本群自定义物品.*/, fnc: 'setCustomItems' }
            ]
        })
    }

    async config(e) {
        const CONFIG_DATA = await readConfiguration()
        logger.mark(CONFIG_DATA)
    }

    async setNickname(e) {
        // 非群无法游玩
        if (!e.isGroup) return e.reply(['该游戏只能在群内使用'])
        /** ID [群, 用户] */
        const ID = [e.group_id, e.user_id]
        /** 用户输入内容 */
        const [, USER_INPUT_CONTENT, NICKNALE] = e.msg.match(/^[#\/]设置(.*)店昵称(.*)$/)
        // 昵称字数不可大于 7
        if (NICKNALE.length > 7) return e.reply(['昵称不可大于7位'])
        /** 配置数据 */
        const configData = await readConfiguration()
        /** 默认物品 */
        let defaultItem = configData['bread_thing']
        /** 自定义物品 */
        const CUSTOM_ITEMS = configData['special_thing_group'][ID[0]]

        // 判断执行条件 [不存在自定义物品 同时 用户输入内容不为默认物品] 或者 [存在自定义物品 同时 用户输入内容不为自定义物品]
        if (!CUSTOM_ITEMS && USER_INPUT_CONTENT !== defaultItem || CUSTOM_ITEMS && USER_INPUT_CONTENT !== CUSTOM_ITEMS) return false
        // 存在自定义物品 默认物品修改为自定义物品
        if (CUSTOM_ITEMS) {
            defaultItem = CUSTOM_ITEMS
        }


        // 昵称字数不可小于等于 0
        if (NICKNALE.length <= 0) return e.reply([`你在指令后面附带你需要修改的昵称，如: #设置${defaultItem}店昵称傅卿何`])

        // 判断是否有此群文件夹，没有则创建
        if (!isGroupExist(ID[0])) { createAGroupFolder(ID[0]) }

        // 判断是否存在该用户，没有则创建基础信息
        if (!isPlayerExist(ID[0], ID[1])) {
            storagePlayerData(ID[0], ID[1], {
                name: e.sender.card || '未设置面包昵称',
                lv: 0,
                xp: 0,
                number: 0,
                cd: { buy: 0, eat: 0, rob: 0, give: 0, bet: 0 },
                log: { buy: [], eat: [], rob: [], give: [], bet: [] }
            })
        }

        /** 用户数据 */
        const USER_DATA = await getPlayerData(ID[0], ID[1])

        // 用户数据处理 & 存储
        USER_DATA['name'] = NICKNALE
        storagePlayerData(ID[0], ID[1], USER_DATA)

        return e.reply([`已设置面包店昵称为${NICKNALE}`], true)
    }

    async setCustomItems(e) {
        // 非群无法游玩
        if (!e.isGroup) return e.reply(['该游戏只能在群内使用'])
        // 判断执行条件 [适配器不为QQBot] 判断执行条件 [不为管理员且不为主人]
        if (e.adapter !== 'QQBot') if (!e.member.is_admin && !e.isMaster) return e.reply(['无权限，只有群主或管理员可以设置'])
        /** ID [群, 用户] */
        const ID = [e.group_id, e.user_id]
        /** 用户输入内容 */
        const CUSTOM_ITEMS = e.msg.replace(/\s|#|\/|设置本群自定义物品/g, '')
        // 自定义物品字数不可大于 5 或小于 2
        if (CUSTOM_ITEMS.length > 5 || CUSTOM_ITEMS.length < 2) return e.reply(['物品名称不可大于5位或小于2位'])
        /** 配置数据 */
        const configData = await readConfiguration()

        // QQBot中，如果存在自定义物品则无法设置
        if (e.adapter === 'QQBot') if (configData['special_thing_group'][ID[0]]) return e.reply(['已经设置了自定义物品，无法二次设置'])

        configData['special_thing_group'][ID[0]] = CUSTOM_ITEMS
        storageConfigrData(configData)
        e.reply(['设置成功~\r发送[#面包帮助]查看新指令吧~'])
    }
}